#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <pthread.h>

int main(int argc, char const *argv[])
{
    FILE *fp = fopen("time.txt", "a");
    if(fp == NULL)
    {
        perror("打开time.txt失败");
        exit(0);
    }

    int line; // 保存当前time.txt的行数

    // 判定指定文件line是否存在
    // 若存在则返回假，若不存在返回真
    FILE *fp_line;
    if(access("line.txt", F_OK))
    {
        fp_line = fopen("line.txt", "w+"); // 第一次打开该文件，就要创建它
        line = 0;
    }
    else
    {
        fp_line = fopen("line.txt", "r+"); // n
        fscanf(fp_line, "%d", &line);
    }


    bpp bits_per_pixel;
    
    // 将line.txt文件对应的缓冲区设置为不缓冲
    setvbuf(fp_line, NULL, _IONBF, 0);


    // 每隔一秒，不断向 time.txt 写入序号和时间
    char buf[50];
    while(1)
    {
        time_t t = time(NULL); // --> 1970.1.1 00:00:00 至今的秒数

        // 将行号line+时间，写入buf
        bzero(buf, 50);
        snprintf(buf, 50, "%d, %s", ++line, ctime(&t)); // 秒数  -->  年月日
          printf(         "%d, %s",   line, ctime(&t)); // 秒数  -->  年月日

        // 将buf写入文件time.txt，并确保数据刷新
        fputs(buf, fp);
        fflush(fp);

        // 将更新后的line覆盖写入line.txt，并确保数据刷新
        fseek(fp_line, 0L, SEEK_SET); // 从头开始写
        fprintf(fp_line, "%d", line);

        sleep(1);
    }

    return 0;
}
